﻿//作业标题(700)
//扫雷
//
//作业内容
//1. 完成扫雷游戏代码。
//
//2. 并将扫雷游戏的设计和代码完成一篇博客。


//函数
﻿//#define _CRT_SECURE_NO_WARNINGS 1
//函数作业
//乘法口诀表
//作业内容
//实现一个函数，打印乘法口诀表，口诀表的行数和列数自己指定
//如：输入9，输出9 * 9口诀表，输出12，输出12 * 12的乘法口诀表。
//#include<stdio.h>
//void mul(int i, int j)
//{
//	for (j = 1; j <= i; j++)
//	{
//		printf("%d*%d=%d ",j,i, i * j);
//	}
//}
//int main()
//{
//	int i = 0;
//	int j = 0;
//	scanf("%d", &i);
//	mul(i,j);
//	return 0;
//}



//交换两个整数
//作业内容
//实现一个函数来交换两个整数的内容。
//#include<stdio.h>
//void Add(int* i, int* j)
//{
//	int tmp = *i;
//	*i = *j;
//	*j = tmp;
//}
//int main()
//{
//	int i = 0;
//	int j = 0;
//	scanf("%d %d", &i, &j);
//	Add(&i, &j);
//	printf("%d %d", i, j);
//	return 0;
//}




//函数判断闰年

//作业内容
//实现函数判断year是不是润年。
//是闰年返回1
//不是返回0
//#include<stdio.h>
//int is_leap_year(int year)
//{
//	return ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
//}
//int main()
//{
//	int year = 0;
//	scanf("%d", &year);
//	int ret=is_leap_year(year);
//	if (ret == 1)
//		printf("是闰年");
//	else
//		printf("不是闰年");
//	return 0;
//}







//作业标题(680)
//函数判断素数
//作业内容
//实现一个函数is_prime，判断一个数是不是素数。
//利用上面实现的is_prime函数，打印100到200之间的素数。
//#include<stdio.h>
//#include<math.h>
//void is_prime(int i)
//{
//	int n = 0;
//	int flag = 0;
//	for (n = 2; n < sqrt(i); n++)
//	{
//		if (i % n == 0)//不是素数
//			flag = 1;
//		break;
//	}
//	if (flag == 0)
//		printf("%d ",i);
//}
//int main()
//{
//	int i = 0;
//	for (i = 101; i <= 200; i += 2)
//	{
//		//判断是否素数
//		is_prime(i);
//	}
//	return 0;
//}


//#include<stdio.h>
//#include<math.h>
//int is_prime(int i)
//{
//	int n = 0;
//	for (n = 2; n <= sqrt(i); n++)
//	{
//		if (i % n == 0)//不是素数
//	        return 0;
//	}
//		return 1;
//}
//int main()
//{
//	int i = 0;
//	int ret = 0;
//	for (i = 101; i <= 200; i += 2)
//	{
//		//判断是否素数
//		 ret=is_prime(i);
//		 if (ret == 1)
//			 printf("%d ", i);
//	}
//	
//	return 0;
//}


//函数递归作业
//计算斐波那契数
//递归和非递归分别实现求第n个斐波那契数
//例如：
//输入：5  输出：5
//输入：10， 输出：55
//输入：2， 输出：1
////递归
//#include<stdio.h>
//int Fib(int a)
//{
//	if (a <= 2)
//		return 1;
//	else
//		return Fib(a-2) + Fib(a-1);
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int ret = Fib(a);
//	printf("%d\n", ret);
//	return 0;
//}


//非递归
//#include<stdio.h>
//int Fib(int a)
//{
//	int x = 1;
//	int y = 1;
//	int z = 1;
//	while (a > 2)
//	{
//		z = x + y;
//		x = y;
//		y = z;
//		a--;
//	}
//	return z;
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	int ret = Fib(a);
//	printf("%d", ret);
//	return 0;
//}


//作业标题(682)
//递归实现n的k次方
//编写一个函数实现n的k次方，使用递归实现
//#include<stdio.h>
//int my_power(int n,int k)
//{
//	int count = 0;
//	if (k==0)//等于1
//		return 1;
//	else //不等于1
//	{
//		while (k>0)
//		{
//			return count = n * my_power(n, k - 1);
//		}
// while(k<0)
// //
//	}
//}
//int main()
//{
//	int n = 0;
//	int k = 0;
//	scanf("%d %d", &n,&k);
//	int ret = my_power(n,k);
//	printf("%d", ret);
//	return 0;
//}


//作业标题(683)
//计算一个数的每位之和（递归实现）
//作业内容
//写一个递归函数DigitSum(n)，输入一个非负整数，返回组成它的数字之和
//例如，调用DigitSum(1729)，则应该返回1 + 7 + 2 + 9，它的和是19
//输入：1729，输出：19
//#include<stdio.h>
//int DigitSum(int n)
//{
//	int r = 0;
//	int count = 0;
//	if (n <= 10)
//		return n;
//	else//大于10
//	{
//		while (n)
//		{
//			r = n % 10;
//			n = n / 10;
//			count = count + r;
//		}
//		return count;
//	}
//		
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = DigitSum(n);
//	printf("%d", ret);
//	return 0;
//
//}




//#include<stdio.h>
//int DigitSum(int n)
//{
//	int count = 0;
//	int r = 0;
//	if (n <= 10)
//	{
//		return n % 10;
//	}
//	else
//	{
//		r = n % 10;
//		count=DigitSum(n / 10);
//		count = count + r;
//		return count;
//	}
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret = DigitSum(n);//函数返回值需要接受🆗🆗🆗
//	printf("%d", ret);
//	return 0;
//}

//✔
//#include<stdio.h>
//int DigitSum(int n)
//{
//	int r = 0;
//	if (n == 0)
//	{
//		return 0;
//	}
//	else//大于10
//	{
//		 r = n % 10;
//		 return r + DigitSum(n / 10);
//	}
//
//}
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int ret= DigitSum(n);
//	printf("%d", ret);
//	return 0;
//
//}


//写一个递归函数DigitSum(n)，输入一个非负整数，返回组成它的数字之和.
//例如，调用DigitSum(1729)，则应该返回1+7+2+9，它的和是19
//#include <stdio.h>
//int DigitSum(int n)
//{
//	int sum = 0;
//	int m = 0;
//	if (n != 0)
//	{
//		m = n % 10;
//		n = n / 10;
//		sum = m + DigitSum(n);
//	}
//	return sum;
//}
//int main()
//{
//	int a;
//	printf("请输入一个整数： ");
//	scanf("%d", &a);
//	printf("各位数之和为：%d\n", DigitSum(a));
//	return 0;
//}






//作业标题(684)
//字符串逆序（递归实现）
//
//作业内容
//编写一个函数 reverse_string(char* string)（递归实现）
//
//实现：将参数字符串中的字符反向排列，不是逆序打印。
//
//要求：不能使用C函数库中的字符串操作函数。
//
//比如 :
//
//char arr[] = "abcdef";
//
//
//逆序之后数组的内容变成：fedcba
//
//#include<stdio.h>
//
//void reverse_string(char* str)
//{
//	if(*str != '\0')
//	{
//		printf("%s\n", *str);
//		reverse_string(str + 1);	
//	}
//}
//int main()
//{
//	char arr[] = "abcdef";
//	reverse_string(arr);
//	return 0;
//}





//作业标题(685)
//strlen的模拟（递归实现）
//
//作业内容
//递归和非递归分别实现strlen
//非递归
//#include<stdio.h>
//int my_strlen(char* str)
//{
//	int r =0;
//	while(*str != '\0')
//	{
//		r=r+1;
//		str++;
//	}
//	return r;
//}
//int main()
//{
//	char arr[] = "abcdef";
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}

//递归
//#include<stdio.h>
//int my_strlen(char* str)
//{
//	if (*str == '\0')
//		return 0;
//	else
//	return 1+ my_strlen(str + 1);
//}
//int main()
//{
//	char arr[] = "abcdef";
//	int ret = my_strlen(arr);
//	printf("%d", ret);
//	return 0;
//}

//求阶乘
//作业内容
//递归和非递归分别实现求n的阶乘（不考虑溢出的问题）
//非递归
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	int r = 1;
//	int i = 0;
//	scanf("%d", &n);
//     for(i=1;i<=n;i++)
//	{
//		 r = r * i;
//	}
//	 printf("%d", r);
//	return 0;
//}


//递归
//#include<stdio.h>
//int factorial(int n,int i,int r)
//{
//	if (i <= n)
//	{
//	    r = factorial(n - 1, i + 1, r * i);
//		return r;
//	}
//	else
//		return r;
//}
//int main()
//{
//	int n = 0;
//	int i = 1;
//	int r = 1;
//	scanf("%d", &n);
//	int ret=factorial(n,i,r);
//	printf("%d", ret);
//	return 0;
//}


//打印一个数的每一位
//作业内容
//递归方式实现打印一个整数的每一位
//非递归
//#include<stdio.h>
//int main()
//{
//	int n = 0;
//	int r = 0;
//	scanf("%d", &n);
//	while (n>)
//	{
//		n = n / 10;
//		r = n % 10;
//		printf("%d ", r);
//
//	}
//	
//	return 0;
//}

//传统方式
//#include<stdio.h>
//int main()
//{
//	//1234%10=4
//	//1234/10=123
//	//依次取模和除法
//	int a = 0;
//	int num = 0;
//	scanf("%d", &a);
//	while (a)//a除以到最后1/10得0.1不是整数表达式，跳出循环
//	{
//	
//		if (a >9)
//		{
//			a = a / 10;
//			num = a % 10;
//			printf("%d ", num);
//		}
//
//	}
//	return 0;
//}

//
//#include<stdio.h>
//void Print(int a)//1234
//{
//	if (a > 9)//a是两位数，当a是一位数时跳出循环
//
//	{
//		Print(a / 10);
//	}
//	printf("%d ", a % 10);
//}
//int main()
//{
//	int a = 0;
//	scanf("%d", &a);
//	Print(a);
//	return 0;
//}